//
//  CZRepostStatuses.swift
//  GZWeibo666
//
//  Created by Wu YJ on 15/12/2.
//  Copyright © 2015年 itcast. All rights reserved.
//

import UIKit

class CZRepostStatuses: NSObject
{
    //转发创建时间。
    var created_at : String?
    
    //微博的ID
    var id : Int = 0
    
    //微博信息的内容
    var text : String?
    
    //微博来源
    var source : String?
    
    //中等尺寸图片地址
    var bmiddle_pic : String?
    
    //转发数
    var reposts_count : Int?
    
    //评论数
    var comments_count : Int?
    
    //微博作者的用户信息字段
    var user : CZUser?
    
    //转发的微博信息字段
//    var retweeted_status : String?
    
    
    /// 对象信息
    override var description: String
    {
        // 数组存放的是需要打印的属性
        let properties = ["created_at", "id", "text", "source","bmiddle_pic", "reposts_count", "comments_count", "user"]
        
        // 根据传入数组作为字典的key,value会从模型里面自动获取
        // \n 换行 \t table
        return "\n \t 微博模型: \(dictionaryWithValuesForKeys(properties))"
    }
    
    
    /// 字典转模型
    init(dict: [String: AnyObject])
    {
        super.init()    // 创建对象
        
        // 有了对象,才能调用对象的方法
        // KVC字典转模型
        setValuesForKeysWithDictionary(dict)
    }
    
    //拦截
    override func setValue(value: AnyObject?, forKey key: String)
    {
        if key == "user"
        {
            if let dict = value as? [String: AnyObject]
            {
                // 在这里字典转模型, 赋值给user属性
                user = CZUser(dict: dict)
            }
            return
        }
        super.setValue(value, forKey: key)
    }
    
    /// KVC字典转模型时,字典的key在模型中找不到对应的属性时会调用,在这个方法里面可以什么都不做
    override func setValue(value: AnyObject?, forUndefinedKey key: String)
    {
        
    }
    

    //获取网络的转发数据
    class func loadRepostStatuses(id:Int ,status: String, finished: (respostStatus: [CZRepostStatuses]?, error: NSError?) -> ())
    {
        CZNetworkTool.sharedInstance.repostStatuses(id, status: status) { (result, error) -> () in
            // 判断是否有错误
            if error != nil || result == nil
            {
                print("error: \(error)")
                // 告诉调用者,出错了
                finished(respostStatus: nil, error: error)
                return
            }
            
//            print("reslut: \(result)")
            
            // 加载到微博数据, 字典转模型
            if let array = result!["retweeted_status"] as? [[String: AnyObject]]
            {
                print("\(array)")
                // 创建一个数组来存放转好的模型
                var respostStatuses = [CZRepostStatuses]()
                
                // 遍历数组,获取里面的每一个字典,
                for dict in array {
                    // 字典转模型
                    let repostStatus = CZRepostStatuses(dict: dict)
                    respostStatuses.append(repostStatus)
                }
                
                // 字典转模型完成, 告诉调用者,有模型数据
                
                finished(respostStatus: respostStatuses, error: nil)
            }
            else
            {
                // 返回的数据不能字典转模型,告诉调用者,没有模型数据
                finished(respostStatus: nil, error: nil)
                print("没有模型数据")
            }
            
            // 判断是否有错误
            if error != nil
            {
                print("error: \(error)")
                // 告诉调用者,出错了
                finished(respostStatus: nil, error: error)
                return
            }
            
            // 加载到微博数据, 字典转模型
            if let array = result!["status"] as? [[String: AnyObject]]
            {
                // 创建一个数组来存放转好的模型
                var respostStatuses = [CZRepostStatuses]()
                
                // 遍历数组,获取里面的每一个字典,
                for dict in array {
                    // 字典转模型
                    let respostStatus = CZRepostStatuses(dict: dict)
                    respostStatuses.append(respostStatus)
                }
                
                // 字典转模型完成, 告诉调用者,有模型数据
                
                finished(respostStatus: respostStatuses, error: nil)
            }
            else
            {
                // 返回的数据不能字典转模型,告诉调用者,没有模型数据
                finished(respostStatus: nil, error: nil)
                print("没有模型数据")
            }
        }
    }
}
